timesheets, spreadsheet plugins and databases

Eric Wilhelm on 2006-02-14T20:29:02

I've been keeping plaintext logs for over a year now with a very simple timestamp command enabled by my .vimrc.

aside: ------------------------------------------- function DayDate () let @a = strftime("%a %b %d, %Y") :put a :normal o endfunction function DayTime () let @a = strftime("%T") . " - " :put a :normal $ endfunction map CD :call DayDate()i map CT :call DayTime()a -------------------------------------------

And then I follow this with a "(tag)" which is an abbreviation for the client and/or project. At the end of the day, I run it through a filter to get a summary so things like:

23:54 - (CD) More juggling of the new distribution files for CAD::Drawing.

turn into a total number of hours spent on "CD", etc. for that day.

Simple, reliable, transparent. But it lacks some advanced summarization aspects and a few other things that I can't quite manage with sed, grep, and my pipesum program. The next step up appears to be things like gnotime, mrproject and other woefully inadequate while simultaneously over-reaching systems. Must I store everything in 10 different program-specific databases?

The issue is that I'm not using this data specifically for billing (I frequently go back through the logs and find some bit of information about what I was doing e.g. the last time I switched the kernel and tweaked around with udev on the fileserver or chased-down some issue with the X server on my notebook (the day to lookup is conveniently calculated by noting the hundred-odd days of uptime on the given system before halt.)) And, I'm not using it specifically to track project progress. But, I might want to use it for either or both and I really don't expect one program to get both of those things right. Even more amusing is that the open source time tracking, billing, etc. software doesn't seem to offer any functionality to track time on projects where tasks might belong to one or more (or zero) clients (e.g. open source projects!)

So, the thought was that I could simply setup a script to append to a csv and link that into an oo.org spreadsheet, which then enables some rather basic 1D/2D queries rather nicely, but leaves me stuck with manually expanding a block of relationships on some of the more complicated summaries where a foreach would self-scale in a custom-built system. Of course then I start thinking database, but don't want to go reinvent the wheel and build everything up from scratch so I start looking at timesheet/tracking projects and end up ranting about it in a blog entry.

aside: ---------- Gnumeric has a perl plugin system, but it appears to be stuck in a cell-driven paradigm (where I'm thinking I probably want to be able to say ~foreach ... "SELECT hours FROM time WHERE task = ? AND client = ?"~ and have that turn into a NxM block of answers complete with client/task labels or some-such.) As if that makes any sense even to me... The important thing is not having to click-drag to scale-out the evaluation to pickup new data. And this just screams database right, but that just takes me back through the circle to thinking I should build on an existing something. ----------

Back to the spreadsheet it is. (Wait, how did I come to that conclusion?) For now, at least the gradual wheel reinvention process allows me to get on with my life.